package cn.itcast.nems.order.dao.entity;

import cn.itcast.nems.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * <p>
 * 退费单-头
 * </p>
 *
 * @author liyong
 * @since 2023-08-31
 */
@Getter
@Setter
@TableName("e2_order_refund")
public class OrderRefund extends BaseEntity {

    private static final long serialVersionUID = 1L;
    private String id;
    /**
     * 学籍id
     */
    private String studentRecordId;
    /**
     * 班级ID
     */
    private Integer clazzId;

    /**
     * 班级名称
     */
    private String clazzName;

    /**
     * 退费单号，生成规则：TF+YYMMDD+ZEROFILL(MURMURHASH(UUID()),0,10) 示例：TF2308281693193454
     */
    private String no;

    /**
     * 业务日期。注：可能存在业务实际发生日期与录单日期不一致的情况，此日期应为业务实际发生日期。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime bizDate;

    /**
     * 费用类型：培训收入、押金、电脑使用费、吸烟罚款、学生住宿费等。注：数据来自来自于数据字典
     */
    private String costTypeId;

    /**
     * 费用类型，来自于数据字典
     */
    private String costTypeName;

    /**
     * 退费类型：退报名费、退学费、退多交学费、退电脑使用费等。注：来自于数据字典
     */
    private String refundTypeId;

    /**
     * 退费类型，来自于数据字典
     */
    private String refundTypeName;

    /**
     * 退费原因描述
     */
    private String reasonDescription;

    /**
     * 是否贷款退费：0否、1是
     */
    private Boolean loanFlag;

    /**
     * 是否特殊退费：0否、1是
     */
    private Boolean specialFlag;

    /**
     * 特殊退费金额。单位：分
     */
    private Integer specialRefundAmount;

    /**
     * 是否七天内退费：0否、1是
     */
    private Boolean sevenDayFlag;

    /**
     * 应退金额。单位：分
     */
    private Integer refundableAmount;

    /**
     * 实际退款总金额。单位：分
     */
    private Integer amount;

    /**
     * 退款状态：待审核|SUBMITED、审批中PENDING、审核未通过|REJECTED、审批通过待退款|REFUNDING、退费完成|POSTED
     */
    private String state;

    /**
     * 退款收款人名称
     */
    private String receiverName;

    /**
     * 退款收款银行账号开户银行
     */
    private String receiverBankName;

    /**
     * 退款收款人联行号
     */
    private String receiverInterBankNo;

    /**
     * 退款收款人银行账号
     */
    private String receiverBankAccountNo;

    /**
     * 退款收款人银行账号开户省份
     */
    private String receiverBankProvince;

    /**
     * 退款收款人银行账号开户城市
     */
    private String receiverBankCity;

    /**
     * 退费方式：原路退费|ORIGINAL、银行转账|BANK_TRANSFER、现金|CASH、其他|OTHER。注：来自于数据字典
     */
    private String refundMethod;

    /**
     * 退款操作人姓名，通常为财务
     */
    private String refundOperatorName;

    /**
     * 退款操作人邮箱，通常为财务
     */
    private String refundOperatorEmail;

    /**
     * 退款付款时间
     */
    private LocalDate refundDate;

    /**
     * 退款渠道名称，沿用老EMS字段
     */
    private String refundChannel;

    /**
     * 退款手续费，沿用老EMS字段。单位：分
     */
    private Integer charge;

    /**
     * 收据号，沿用老EMS字段
     */
    private String receiptNo;

    /**
     * POS单号，沿用老EMS字段
     */
    private String posNo;
    /**
     * 支付单号
     */
    private String paymentNo;
    /**
     * 创建订单的业务线，来自于主数据
     */
    private Integer businessLineId;

    /**
     * 退费业务线：来自于订单上的业务线
     */
    private String businessLineName;

    /**
     * 退单行
     */
    @TableField(exist = false)
    private String orderRefundLineId;
//    /**
//     * 校区
//     */
//    private String campusId;
//    private String campusName;
}
